package com.powerteam.service.masterData;

import com.github.pagehelper.PageInfo;
import com.powerteam.model.masterData.OrgUnit;
import com.powerteam.model.masterData.OrgUnitUser;
import com.powerteam.model.sys.User;
import com.powerteam.vo.Result;
import com.powerteam.vo.masterData.QueryOrgUnitUserVO;

import java.util.List;

/**
 * 组织架构相关服务接口
 *
 * @author jinming.zhang
 * @version 0.0.1
 * @date 2021/12/30
 */
public interface OrgUnitService {


    /**
     * 查询下级列表
     *
     * @param userId
     * @return List<Integer>
     * @Author jinming.zhang
     * @Date 2022/1/7
     */
    List<Integer> findSubordinate(Integer userId);

    /**
     * 查找所有组织单位
     *
     * @param
     * @return List<OrgUnit>
     * @Author jinming.zhang
     * @Date 2022/1/10
     */
    List<OrgUnit> findAllOrgUnit();

    /**
     * 添加组织架构信息
     *
     * @param orgUnit
     * @return Result
     * @Author jinming.zhang
     * @Date 2022/1/10
     */
    Result insert(OrgUnit orgUnit);

    /**
     * 修改组织架构信息
     *
     * @param orgUnit
     * @return Result
     * @Author jinming.zhang
     * @Date 2022/1/10
     */
    Result update(OrgUnit orgUnit);

    /**
     * 删除组织架构信息
     *
     * @param orgUnitId
     * @return Result
     * @Author jinming.zhang
     * @Date 2022/1/10
     */
    Result delete(Integer orgUnitId);

    /**
     * 上调组织架构信息
     *
     * @param orgUnitId
     * @return Result
     * @Author jinming.zhang
     * @Date 2022/1/10
     */
    Result up(Integer orgUnitId);

    /**
     * 下调组织架构信息
     *
     * @param orgUnitId
     * @return Result
     * @Author jinming.zhang
     * @Date 2022/1/10
     */
    Result down(Integer orgUnitId);

    /**
     * 分页查找不在该组织单位中的用户
     *
     * @param vo
     * @return PageInfo<User>
     * @Author jinming.zhang
     * @Date 2022/1/10
     */
    PageInfo<User> findUserNotInOrgUnit(QueryOrgUnitUserVO vo);

    /**
     * 分页查找该组织单位中的用户
     *
     * @param vo
     * @return PageInfo<OrgUnitUser>
     * @Author jinming.zhang
     * @Date 2022/1/10
     */
    PageInfo<OrgUnitUser> findUserInOrgUnit(QueryOrgUnitUserVO vo);

    /**
     * 将用户添加到组织单位
     *
     * @param orgUnitUser
     * @return Result
     * @Author jinming.zhang
     * @Date 2022/1/10
     */
    Result insertOrgUnitUser(OrgUnitUser orgUnitUser);

    /**
     * 将用户从该组织单位移除
     *
     * @param orgUnitUser
     * @return Result
     * @Author jinming.zhang
     * @Date 2022/1/10
     */
    Result deleteOrgUnitUser(OrgUnitUser orgUnitUser);

    /**
     * 将用户设置为主管
     *
     * @param orgUnitUser
     * @return Result
     * @Author jinming.zhang
     * @Date 2022/1/10
     */
    Result setUnitHead(OrgUnitUser orgUnitUser);

    /**
     * 移除当前组织单位的主管
     *
     * @param orgUnitUser
     * @return Result
     * @Author jinming.zhang
     * @Date 2022/1/10
     */
    Result removeUnitHead(OrgUnitUser orgUnitUser);
}
